window: Implement the root focus api
authorMatthias Clasen <mclasen@redhat.com>
Sat, 2 Mar 2019 13:46:21 +0000 (08:46 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 17 Mar 2019 01:24:44 +0000 (21:24 -0400)
This just uses the existing get/set_focus functions.
We keep them public for now.

gtk/gtkwindow.c

index 10e80d195dbcf74e351f04496231f8caf4572431..3af2dea8779c31833b6e9c85886af70f5b3eec40 100644 (file)
@@ -1118,6 +1118,7 @@ gtk_window_class_init (GtkWindowClass *klass)
                            GTK_PARAM_READWRITE|G_PARAM_STATIC_STRINGS|G_PARAM_EXPLICIT_NOTIFY);
 
   g_object_class_install_properties (gobject_class, LAST_ARG, window_props);
+  gtk_root_install_properties (gobject_class, LAST_ARG);
 
   /**
    * GtkWindow:set-focus:
@@ -2095,6 +2096,9 @@ gtk_window_set_property (GObject      *object,
     case PROP_FOCUS_VISIBLE:
       gtk_window_set_focus_visible (window, g_value_get_boolean (value));
       break;
+    case LAST_ARG + GTK_ROOT_PROP_FOCUS_WIDGET:
+      gtk_window_set_focus (window, g_value_get_object (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2210,6 +2214,9 @@ gtk_window_get_property (GObject      *object,
     case PROP_IS_MAXIMIZED:
       g_value_set_boolean (value, gtk_window_is_maximized (window));
       break;
+    case LAST_ARG + GTK_ROOT_PROP_FOCUS_WIDGET:
+      g_value_set_object (value, gtk_window_get_focus (window));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -7326,6 +7333,8 @@ gtk_window_real_set_focus (GtkWindow *window,
 {
   unset_focus_widget (window);
   set_focus_widget (window, focus);
+
+  g_object_notify (G_OBJECT (window), "focus-widget");
 }
 
 static void